#ifndef SPREADSHEET_H
#define SPREADSHEET_H

#include<QTableWidget>
class Cell;
class SpreadsheetCompare;
class Spreadsheet:public QTableWidget
{
    Q_OBJECT
public:
    Spreadsheet(QWidget*parent=0);
    bool readFile(const QString &fileName);
    bool writeFile(const QString &fileName);
    void clear();
    void sort(const SpreadsheetCompare &compare);
    QTableWidgetSelectionRange selectedRange() const;
    QString currentLocation()const;
    QString currentFormula()const;
public slots:
    void cut();
    void copy();
    void paste();
    void del();
    void selectCurrentRow();
    void selectCurrentColumn();
    void recalculate();
    void setAutoRecalculate(bool recal);
    void findNext(const QString &str, Qt::CaseSensitivity cs);
    void findPrevious(const QString &str, Qt::CaseSensitivity cs);
private slots:
    void somethingChanged();
signals:
    void modified();
private:
    enum{MagicNumber=0x7F51C883, RowCount=999,ColumCount=26};
    Cell* cell(int row,int column)const;
    QString formula(int row,int column) const;
    void setFormula(int row,int column,const QString &formula);
    bool autoRecalc;
    QString text(int row,int column) const;
};
class SpreadsheetCompare
{
public:
    bool operator()(const QStringList &row1,
                    const QStringList &row2) const;
    enum{KeyCount=3};
    int keys[KeyCount];
    bool ascending[KeyCount];
};

#endif // SPREADSHEET_H
